package chart;

import java.awt.Shape;
import java.awt.geom.GeneralPath;
import java.awt.geom.Arc2D;
import java.awt.geom.Point2D;

/**
 * An arc segment
 */
public class ArcSegment
{

  public ArcSegment()
  {
  }

  public Shape Create(
          double centerx,
          double centery,
          double radius,
          double width,
          double start,
          double extent)
  {
    GeneralPath gp = new GeneralPath();
    GeneralPath dummy = new GeneralPath(); // used to find arc endpoints

    double left, top;
    left = centerx - radius;
    top = centery - radius;

    Shape outer = new Arc2D.Double(left, top, 2 * radius, 2 * radius, start, extent, Arc2D.OPEN);
    Shape inner = new Arc2D.Double(left + width, top + width, 2 * radius - 2 * width, 2 * radius - 2 * width, start + extent, -extent, Arc2D.OPEN);
    gp.append(outer, false);

    dummy.append(new Arc2D.Double(left + width, top + width, 2 * radius - 2 * width, 2 * radius - 2 * width, start, extent, Arc2D.OPEN), false);

    Point2D point = dummy.getCurrentPoint();

    if (point != null)
    {
      gp.lineTo(point.getX(), point.getY());
    }
    gp.append(inner, false);

    dummy.append(new Arc2D.Double(left, top, 2 * radius, 2 * radius, start + extent, -extent, Arc2D.OPEN), false);

    point = dummy.getCurrentPoint();
    gp.lineTo(point.getX(), point.getY());
    return gp;
  }
}